// 引入axios
import axios from "axios";
import Router from "@/router";//引入路由
import {setnullString , GetCookie} from "@/config/config";
import Vue from "vue"
let v = new Vue()
// 有一种情况是相同登录页但是不同账号登录不同的平台（单点登录）
// 1）单点登录功能后端返回的是跳转到不同平台的url地址
// 2）单点登录的判断是后端实现的 
// 3）单点登录不存在session(后端服务器缓存)
// axios和ajax区别 axios是ajax的Promise的封装
// axios拥有拦截器 对于请求发送前进行拦截 
// 对于后端数据返回后进行拦截
// axios.interceptors 指的的axios对象里面的interceptors方法
// interceptors值得就是axios的拦截器
// request.use 是请求发送前的拦截器
// axios.interceptors.request.use(config =>{
//     // console.log(config)
//     // config发送到后端前 我们进行一些处理
//     // 因为除了登录注册接口以外该接口需要登录那么我们就按照接口文档所说的提示加上令牌
//     // 本次接口文中所说加TOKEN令牌
//     // 我们把获得到的token放在Cookie中
//     // 如果token已经存在Cookie中就能说明他登录成功
//     if(GetCookie("token")){
//         // config.headers叫做请求头
//         // 在请求头里放token
//         config.headers["Authorization"] = GetCookie("token")
//     }
//     return config
// })
// // reponse.use请求后的拦截器
// // 项目中后端数据回来后进行所有接口的同意拦截
// axios.interceptors.response.use(res =>{
//     console.log(res)
//     // 防null数据处理
//     // 500 404页面
//     if(res.status ==200){
//         // 请求成功
//         // 正常返回的情况下 我们只要res.data的内容
//         // 在部分情况下数据 b:{a:1} 页面双向绑定{{b.a}}
//         // 但是后端直接返回b:null 如果页面绑定{{b.a}}那直接报错
//         // 如果出现这种情况一般来说是后端的问题 但是后端有说没法改那就必须走前端改
//         // 防后端数据返回null处理 
//         return setnullString(res.data)
//     }else{
//         Router.push("/500")
//     }

// })


let request =(parms)=>{
    console.log(parms)
    return new Promise((resolve, reject) =>{
        // console.log("1")
        const loading =v.$loading({
            lock: true,
            text: 'Loading',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
          });
        let headers = {};
        if(GetCookie("token")){
        // config.headers叫做请求头
        // 在请求头里放token
            // config.headers["Authorization"] = GetCookie("token")
            headers= {
                Authorization :GetCookie("token")
            }
        }
        //   axios是ajax的Promise
        axios({
            method :parms.method,
            url:parms.url ,
            data:parms.data,
            headers
        }).then(res =>{
            console.log(res)
            loading.close();
            // 调接口成功 不意味着后端返回的数据是正确的 有可能仍然有问题
            // 和后端约定好 第二道防线 比如返回的code必须是200才是成功
            // 返回400是需要重新登录
            // 返回其他是错的
            resolve(setnullString(res.data))
            // if(res.data.code == 200){
            //     resolve(res)
            // }else if(res.data.code == 400){
            //     Router.push("/")
            //     reject()
            // }else{
            //     Router.push("/500")
            //     reject()
            // }
        }).catch(err =>{
            loading.close();
            reject("系统正在维护中")
        })
    })

}
// 把当前的axios向外抛出
// export default axios 
export default request

